std::variant & std::visit

std::visit은 std::variant 타입 변수에 대한 올바를 타입으로 접근할 수 있게 하는 용도로 사용한다.
(std::variant는 가변 타입(템플릿)으로 정의되어 있음)
variant<string, int> house;
// house=" ";
house=221; // string, int
입력된 string, int 타입에 따라 각기 다른 출력 메서드 사용
struct AddressPrinter{
void operator()(const string& house_name) const {
cout<<"A house called "<<house_name<<'\n';
}
void operator()(const int house_number) const {
cout<<"House number "<<house_number<<'\n';
}
};
//
AddressPrinter ap;
std::visit(ap, house);
Lambda Expression을 사용하면 아래와 같이 표현 가능
std::visit([](auto& arg){
using T=decay_t<decltype(arg)>;
if constexpr(is_same_v<T, string>){
cout<<"A house called "<<arg.c_str()<<'\n';
} else {
cout<<" House number "<<arg<<'\n';
}
}, house);